package com.sisgesbyte.web.managedBean.paginaweb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.services.administracion.MantenimientoCategoriaProd;
import com.sisgesbyte.services.administracion.MantenimientoProducto;
import com.sisgesbyte.services.administracion.bean.CategoriaProdBean;
import com.sisgesbyte.services.administracion.bean.CategoriaProdListaResponse;
import com.sisgesbyte.services.administracion.bean.ProductoBean;
import com.sisgesbyte.services.administracion.bean.ProductoListaResponse;

@ManagedBean
@ViewScoped
public class WebProductosxCategoriaMBean implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@EJB
	private MantenimientoCategoriaProd mantenimientoCategoriaProd;
	@EJB
	private MantenimientoProducto mantenimientoProducto;
	private List<CategoriaProdBean> listaCategoriaProductos;
	private List<ProductoBean> listaProductos;
	private List<CategoriaProdBean> hijos;
	private int idCatgegoria;
	private String categoria;
	
	@PostConstruct
	private void init() {
		inicializar();
	}
	
	public void inicializar(){
		try{
			FacesContext fc = FacesContext.getCurrentInstance();
			Map<String,String> params = fc.getExternalContext().getRequestParameterMap();
			setIdCatgegoria(Integer.valueOf(params.get("categoria")));
		}catch(Exception e){
			setIdCatgegoria(0);
		}
		hijos = new ArrayList<CategoriaProdBean>();
		try{
			FiltrosSQLBean filtros = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			FiltrosBean filtroCampos = new FiltrosBean();
			List<String> campos = new ArrayList<String>();
			campos.add("estado");
			filtroCampos.setCampos(campos);
			filtroCampos.setOperador("=");
			listaFiltros.add(filtroCampos);
			List<Object> valores = new ArrayList<Object>();
			valores.add(true);
			filtros.setListaFiltros(listaFiltros);
			filtros.setListaValores(valores);
			CategoriaProdListaResponse listaCategorias = mantenimientoCategoriaProd.listaCategoriasProducto(ObtenerIdTransaccion(), filtros);
			this.listaCategoriaProductos = listaCategorias.getListaCategoriaProductos();
			for(CategoriaProdBean ls : listaCategoriaProductos){
				if(ls.getId()==idCatgegoria){
					hijos.add(ls);
					setCategoria(ls.getNombre());
					break;
				}
			}
			obtenerHijos(idCatgegoria);
			buscarProductos();
		}catch(Exception e){
			System.out.println("Error al obtener la lista de categoria " + e.getMessage());
		}
	}

	public void obtenerHijos(int padreId) {
		for(CategoriaProdBean lista : listaCategoriaProductos){
			if(padreId == lista.getPadre_id()){
				hijos.add(lista);
				obtenerHijos(lista.getId());
			}
		}
	}
	public void buscarProductos(){
		try{
			FiltrosSQLBean filtros = new FiltrosSQLBean();
			List<FiltrosBean> listaFiltros = new ArrayList<FiltrosBean>();
			List<Object> valores = new ArrayList<Object>();
			//productos activos
			FiltrosBean filtroCampos = new FiltrosBean();
			List<String> campos = new ArrayList<String>();
			campos.add("p.active");
			filtroCampos.setCampos(campos);
			filtroCampos.setOperador("=");
			listaFiltros.add(filtroCampos);
			valores.add(true);
			if(idCatgegoria > 0){
				//productos por categoria
				FiltrosBean filtroCategoria = new FiltrosBean();
				List<String> camposCategoria = new ArrayList<String>();
				camposCategoria.add("p.categoria_producto_id");
				filtroCategoria.setCampos(camposCategoria);
				filtroCategoria.setOperador("in");
				filtroCategoria.setNumeroValores(hijos.size());
				listaFiltros.add(filtroCategoria);
				for(CategoriaProdBean lista : hijos){
					valores.add(lista.getId());
				}
			}
			filtros.setListaFiltros(listaFiltros);
			filtros.setListaValores(valores);
			ProductoListaResponse response = mantenimientoProducto.listaProductos(ObtenerIdTransaccion() , filtros);
			if(response.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)){
				this.listaProductos = response.getListaProductos();
			}
		}catch(Exception e){
			System.out.println("Error al capturar " + e.getMessage());
		}
	}
	public String ObtenerIdTransaccion() {
		String sessionId = "";
		try {
			FacesContext fCtx = FacesContext.getCurrentInstance();
			HttpSession session = (HttpSession) fCtx.getExternalContext()
					.getSession(false);
			sessionId = session.getId().replace(".undefined", "");
		} catch (Exception e) {
			sessionId = "Error";
			System.out.println("Error al obtener Session" + e);
		}
		return sessionId;
	}
	public int getIdCatgegoria() {
		return idCatgegoria;
	}

	public void setIdCatgegoria(int idCatgegoria) {
		this.idCatgegoria = idCatgegoria;
	}

	public List<CategoriaProdBean> getListaCategoriaProductos() {
		return listaCategoriaProductos;
	}

	public void setListaCategoriaProductos(
			List<CategoriaProdBean> listaCategoriaProductos) {
		this.listaCategoriaProductos = listaCategoriaProductos;
	}

	public List<ProductoBean> getListaProductos() {
		return listaProductos;
	}

	public void setListaProductos(List<ProductoBean> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public String getCategoria() {
		return categoria;
	}

	public void setCategoria(String categoria) {
		this.categoria = categoria;
	}
	
}
